Comment mettre un éléphant dans un porte-conteneur en 3 mouvements?

PgDay France
2022-06-22

logo EDB

Qui suis-je?

  • Lætitia Avrot
  • Trésorière de PostgreSQL Europe
  • Co-fondatrice de #PostgresWomen
  • Field CTO chez EDB
  • @l_avrot
  • mydbanotebook.org
Image by Anemone123 from Pixabay
logo edb

Conteneurs

  • Qu'est-ce que c'est?
  • Pourquoi?
  • Comment?
  • Est-ce pour moi?
Image by Gerd Altmann from Pixabay
logo EDB

Qu'est-ce que c'est?

Un conteneur est une enveloppe virtuelle qui permet de distribuer une application avec tous les éléments dont elle a besoin pour fonctionner : fichiers source, environnement d'exécution, librairies, outils et fichiers.
Wikipedia
Image by MirelaSchenk from Pixabay
logo EDB

Qu'est-ce que c'est?

Ils sont assemblés en un ensemble cohérent et prêt à être déployé sur un serveur et son système d'exploitation. Contrairement à la virtualisation de serveurs et à une machine virtuelle, le conteneur n’intègre pas de noyau, il s’appuie directement sur le noyau de l'ordinateur sur lequel il est déployé.
Wikipedia
Image by MirelaSchenk from Pixabay
logo EDB

Qu'est-ce que c'est?

  • Isolé
  • Léger
  • Sécurisé
  • Auto-suffisant
Image by monicore from Pixabay
logo EDB

Plusieurs technologies

  • Docker
  • LXC (LinuX Containers)
  • Podman
  • ...
Image by Ulrike Leone from Pixabay
logo EDB

C'est tout?

  • Non
  • Ça va plus loin!
  • Voici... Kubernetes!
Image by Design_Miss_C from Pixabay
logo EDB

Kubernetes

Kubernetes est un système open source qui vise à fournir une plate-forme permettant d'automatiser le déploiement, la montée en charge et la mise en œuvre de conteneurs d'application sur des clusters de serveurs.
Wikipedia
Image by David Mark from Pixabay
logo EDB

Pourquoi?

  • Qui a du postgres en standalone en production aujourd'hui?
  • Qui gère moins de 5 clusters Postgres en production?

➜ Plus de travail, moins de ressources

Image by Ian Lindsay from Pixabay
logo EDB

Les tâches du DBA

  • Installations/Configurations
  • Sécurisation
  • Implementation des politiques de Backup/HA
  • Upgrades Mineurs/Majeurs
  • Monitoring
  • Résolution de problèmes
logo EDB
https://dbaday.org/
Image by Gerd Altmann from Pixabay

Passer du scripting à la configuration

  • Installation/configurations
  • Sécurisation
  • Implémentation des Backup/HA
  • Upgrades mineures

Et plus!

  • Auto-réparation
  • Tout est rangé au même endroit
  • Encapsulation de service
  • Self-service pour les devs

Stateless/statefull

The way containers are designed, and particularly the way Docker is designed, the assumption is that the container is stateless.
Mark Davis, ClusterHQ, 17 Jun 2015
Image by Niek Verlaan from Pixabay

Certains ont essayé...

... ils ont eu des problèmes!

ce n'est pas une raison pour ne pas réessayer!

Image by Esther Merbt from Pixabay

Ce qui a tout changé

Kubernetes 1.14 et les volumes persistants

Image by suju-foto from Pixabay

Septembre 2021

Parmi 500 décideurs et lead tech sélectionnés par une étude indépendante commandée par la communauté Data on Kubernetes, 70% font tourner des applications stateful en production, les bases de données représentant la grosse majorité de ces applications stateful.
dok report 2021

Cloud Native PG

  • Opérateur Kubernetes pour Postgres
  • License Apache 2.0
  • Dans le bac à sable de la CNCF

Comment?

  • Déclarez votre configuration
  • Deployez
  • Profitez de la vie!
Image by 은주 송 from Pixabay

Simple

# Example of PostgreSQL cluster
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: cluster-example
spec:
  instances: 3

  primaryUpdateStrategy: unsupervised
  storage:
    size: 1Gi
Image by 은주 송 from Pixabay

Spécifier la version

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
   # [...]
spec:
   # [...]
   imageName: ghcr.io/cloudnative-pg/postgresql:13.6
   #[...]
Image by 은주 송 from Pixabay

Sauvegardes

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
# [...]
spec:
  backup:
    barmanObjectStore:
      destinationPath: "[destination path here]"
      s3Credentials:
        accessKeyId:
          name: aws-creds
          key: ACCESS_KEY_ID
        secretAccessKey:
          name: aws-creds
          key: ACCESS_SECRET_KEY
Image by 은주 송 from Pixabay

Paramétrage

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
# [...]
spec:
  postgresql:
    parameters:
      shared_buffers: "1GB"
      auto_explain.log_min_duration: "10s"
    pg_hba:
      - host laetitia laetitia all scram-sha-256
  # [...]
Image by 은주 송 from Pixabay

Ressources

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
# [...]
  resources:
    requests:
      memory: "32Mi"
      cpu: "50m"
    limits:
      memory: "128Mi"
      cpu: "100m"
  # [...]
Image by 은주 송 from Pixabay

Monitoring

apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: cluster-example
spec:
  selector:
    matchLabels:
      postgresql: cluster-example
  podMetricsEndpoints:
  - port: metrics
Image by 은주 송 from Pixabay

Monitoring

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: cluster-example
# [...]
spec:
# [...]
  monitoring:
    customQueriesConfigMap:
      - name: example-monitoring
        key: custom-queries
Image by 은주 송 from Pixabay

Est-ce pour moi?

Ça dépend

  • Est-ce que votre équipe connait bien Kubernetes?
  • Est-ce que votre équipe connait bien Postgres?
  • Est-ce que vous devez gérer plus de 5 clusters Postgres en production?

Attention

Votre base de données Postgres aura toujours besoin de

  • Modélisation de données
  • Bonnes requêtes SQL
  • Monitoring
Image by succo from Pixabay

Des questions?

Image by Andrew Martin from Pixabay